package com.cctc.rds.scheduler.core.task.impl;

import com.cctc.rds.scheduler.core.task.Task;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 任务 [抽象] 基类。
 *
 * @param <T> 任务参数类型
 */
public abstract class AbstractTask<T> implements Task<T> {
    private final String taskParamType;

    protected AbstractTask() {
        Type superclass = this.getClass().getGenericSuperclass();
        if (superclass instanceof Class) {
            throw new UnsupportedOperationException("任务类型异常！！！");
        } else {
            taskParamType = ((ParameterizedType) superclass).getActualTypeArguments()[0].getTypeName();
        }
        if (taskParamType.equals(Object.class.getName())) {
            throw new UnsupportedOperationException("任务参数类型异常：请指明具体的任务参数类型！！！");
        }
    }

    public Class<T> getTaskParamType() {
        try {
            return (Class<T>) Class.forName(taskParamType);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("任务参数类型解析异常：" + e.getMessage());
        }
    }

}
